创建时间: | 2017/4/17 20:10 |
来源: | http://blog.csdn.net/tomato__/article/details/13625497 |
build的另一个特征是指定你的项目中resources的位置。resources(通常)不是代码,他们不被编译,但是被绑定在你的项目或者用于其它什么原因,例如代码生成。
如果你的POM有一个parent,它可以从parent的build/plugins或者pluginManagement集成plugin配置。
为了阐述继承后的关系,考虑如果parent POM中存在如下plugin:
- <plugin>
- <groupId>my.group</groupId>
- <artifactId>my-plugin</artifactId>
- <configuration>
- <items>
- <item>parent-1</item>
- <item>parent-2</item>
- </items>
- <properties>
- <parentKey>parent</parentKey>
- </properties>
- </configuration>
- </plugin>
然后在继承的孩子POM中做如下配置:
- <pre name="code" class="html"><plugin>
- <groupId>my.group</groupId>
- <artifactId>my-plugin</artifactId>
- <configuration>
- <items>
- <item>child-1</item>
- </items>
- <properties>
- <childKey>child</childKey>
- </properties>
- </configuration>
- </plugin></pre>
这样孩子POM和parent POM中都存在groupId为my.group的plugin,Maven默认的行为将是根据属性名称将两个plugin的configuration的内容进行合并。如果孩子POM中有一个属性,则该属性是有效的,如果孩子POM中没有一个属性,但parent POM中存在,则parent中的属性是有效的。
根据这些规则,上面的例子在Maven中将得到:
- <pre name="code" class="html"><plugin>
- <groupId>my.group</groupId>
- <artifactId>my-plugin</artifactId>
- <configuration>
- <items>
- <item>child-1</item>
- </items>
- <properties>
- <childKey>child</childKey>
- <parentKey>parent</parentKey>
- </properties>
- </configuration>
- </plugin></pre>
通过在configuration元素中增加combine.children和combine.self属性,孩子POM可以控制Maven怎么合并plugin的configuration。
假定这儿是孩子POM的configuration:
- <pre name="code" class="html"><configuration>
- <items combine.children="append">
- <!-- combine.children="merge" is the default -->
- <item>child-1</item>
- </items>
- <properties combine.self="override">
- <!-- combine.self="merge" is the default -->
- <childKey>child</childKey>
- </properties>
- </configuration></pre>
则,现在合并后的效果如下:
- <pre name="code" class="html"><configuration>
- <items combine.children="append">
- <item>parent-1</item>
- <item>parent-2</item>
- <item>child-1</item>
- </items>
- <properties combine.self="override">
- <childKey>child</childKey>
- </properties>
- </configuration></pre>
combine.children="append"表示父POM和子POM的属性合并起来;
combine.self="override"表示子POM的属性完全覆盖父POM的。
4、dependencies:同base build中的dependencies有同样的结构和功能,但这里是作为plugin的依赖,而不是项目的依赖。
5、executions:plugin可以有多个目标,每一个目标都可以有一个分开的配置,甚至可以绑定一个plugin的目标到一个不同的阶段。executions配置一个plugin的目标的execution。
假定一项绑定antrun:run目标到verify阶段,我们希望任务响应build文件夹,同时避免传递配置到他的孩子POM。你将得到一个execution:
- <pre name="code" class="html"><build>
- <plugins>
- <plugin>
- <artifactId>maven-antrun-plugin</artifactId>
- <version>1.1</version>
- <executions>
- <execution>
- <id>echodir</id>
- <goals>
- <goal>run</goal>
- </goals>
- <phase>verify</phase>
- <inherited>false</inherited>
- <configuration>
- <tasks>
- <echo>Build Dir: ${project.build.directory}</echo>
- </tasks>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build></pre>
id:标识,用于和其他execution区分。当这个阶段执行时,它将以这个形式展示:[plugin:goal execution: id]。在这里为: [antrun:run execution: echodir];
goals:一个plugin的execution的目标列表;
phase:目标执行的阶段,具体值看Maven的生命周期列表;
inherited:是否继承;
configuration:在指定的目标下的配置。
pluginManagement的元素的配置和plugins的配置是一样的,只是这里的配置只是用于集成,在孩子POM中指定使用。例如,在父POM中做如下配置:
Reporting包含的属性对应到site阶段(见Maven生命周期)。特定的Maven插件能产生定义和配置在reporting元素下的报告,例如:产生Javadoc报告。